/**
 * @widoc $.dataFormat
 * @namespace aux
 * @depends encode/$.encodeHtml
 * @des 用于转换数据的公共库
 * @type object
 * @attr {function} arr2Hash(opts) 将 data 数组转为 hash 对象
 * - opts.data {Array} 原始数据
 * - opts.keyField {string} 在 data 中的 keyField。data 中将作为 res 对象的 key 的字段。
 * - opts.valField {string=} 在 data 中的 valField。定义时，res[key] = dataItem[valField]；未定义时，res[key] = dataItem(浅拷贝)。
 * @attr {function} hash2Arr(opts) 将 key-val 格式的数据转换为数组
 * - opts.data {object} 原始数据
 * - opts.keyField {string=} 在 resItem 中的 keyField。定义时，resItem[keyField] = key。valField 未定义时失效。
 * - opts.valField {string=} 在 resItem 中的 valField。定义时，resItem[valField] = data[key]；未定义时，resItem = data[key](浅拷贝)。
 * @attr {function} domStr(val) 将 val 转为在 dom 中显示的字符串。
 * - val 若为 undefined | null，将被转为 ''，其他类型将转为 string 后，由 $.encodeHtml() 编码
 */
$.dataFormat = {
    arr2Hash: function(opts){
        opts = $.extend({
            data: [],
            keyField: undefined,
            valField: ''
        }, opts);
        var res = {},
            data = opts.data,
            sKeyField = opts.keyField,
            sValField = opts.valField;
        if(data){
            for(var i = 0, cur, len = data.length; i < len; i++){
                cur = data[i];
                res[cur[sKeyField]] =
                    sValField ? cur[sValField] : cur;
            }
        }
        return res;
    },
    hash2Arr: function(opts){
        opts = $.extend({
            data: {},
            keyField: '',// 定义时，resItem[keyField] = key
            valField: ''// 定义时，resItem[valField] = data[key]；未定义时，resItem = data[key](浅拷贝)
        }, opts);
        var res = [],
            data = opts.data,
            sKeyField = opts.keyField,
            sValField = opts.valField,
            cur, resItem;
        if(data){
            for(var k in data){
                if(data.hasOwnProperty(k)){
                    cur = data[k];
                    if(sValField){
                        resItem = {};
                        resItem[sValField] = cur;
                    }
                    else{
                        resItem = cur;
                    }
                    if(sKeyField && typeof resItem === 'object'){
                        resItem[sKeyField] = k;
                    }
                    res.push(resItem);
                }
            }
        }
        return res;
    },
    domStr: function(val){
        if(val === undefined || val === null){
            return '';
        }
        // 强转为字符串
        return $.encodeHtml(val + '');
    },
    // 与 Date.format() 相对
    str2Date: function(str, formatStr){},
    date2History: function(dt){},
    date2Future: function(dt){}
};